CC = g++

CFLAGS = -g

DEPS=nanovoid.h union_find_delete.h SuperFastHash.h cxxopts.hpp grain_growth.h enum_hash.hpp nanovoid_app.h grain_growth_test_tool.h 
OBJS=PNBucket.o  LSH.o  union_find_delete.o HashTable.o   OneStep.o grain_growth.o enum_hash.o SuperFastHash.o Nanovoid.o grain_growth_back.o


# INCLUDE = /home/chonghao/test_torch_cpp/libtorch/include/

# LIBTORCH = /home/chonghao/test_torch_cpp/libtorch/
# LDP=-L lib
# LIBS=c10 gloo gtest clog THD protobuf caffe2 torch mkldnn c10d
# LIB=$(patsubst %,-l%,$(LIBS))
# FLAGS=-O3 -std=c++17 -fopenmp -D_GLIBCXX_USE_CXX11_ABI=0
# INCS=include include/torch/csrc/api/include/
# INCLUDE=$(patsubst %,-I%,$(INCS))
# INCPATH := $(shell python -c "import torch.utils.cpp_extension as C; print('-I' + str.join(' -I', C.include_paths()))")

# LIBPATH := $(shell python -c "import torch.utils.cpp_extension as C; print(C.include_paths()[0] + '/../')")

# TORCH_LIBS=-ltorch -lcaffe2 -lc10
install_root=/home/chonghao/cxx_abi_libtorch/libtorch


nv:hash_train_video.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp nanovoid_back.cpp nanovoid_one_back.cpp nanovoid_one_back_normal.cpp
	# $(CC) $(CFLAGS) -o test_nanovoid test_nanovoid.cpp test_nanovoid_tool.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp nanovoid_back.cpp nanovoid_one_back.cpp nanovoid_one_back_normal.cpp -lm -lpng
	$(CC) $(CFLAGS) -O3 -o hash_train_video hash_train_video.cpp test_nanovoid_tool.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp nanovoid_back.cpp nanovoid_one_back.cpp nanovoid_one_back_normal.cpp -lm -lpng -I${install_root}/include -I${install_root}/include/torch/csrc/api/include -D_GLIBCXX_USE_CXX11_ABI=1 -std=gnu++14 -L${install_root}/lib -Wl,-R${install_root}/lib -ltorch -ltorch_cpu -lc10 

gg: grain_growth_test.cpp grain_growth.cpp grain_growth_back.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp
	$(CC) $(CFLAGS) -O3 -o gg grain_growth_test.cpp grain_growth.cpp grain_growth_back.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp

gg_test: test_gg_read.cpp grain_growth.cpp grain_growth_back.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp
	$(CC) $(CFLAGS) -O3 -o gg_test test_gg_read.cpp grain_growth.cpp grain_growth_back.cpp PNBucket.cpp HashTable.cpp LSH.cpp enum_hash.cpp SuperFastHash.cpp Nanovoid.cpp OneStep.cpp union_find_delete.cpp


%.o: %.cpp $(DEPS)
	$(CC) -c -o $@ $< $(CFLAGS)

grain_growth_test: $(OBJS) grain_growth_test.o
	$(CC) -O3 -o grain_growth_test $^ $(CFLAGS)


clean:
	rm -rf ./*.o ./hash_train_video ./gg ./gg_test ./nv